/**
 * 区域服务API
 * 提供省市区街道社区楼栋房间等区域管理相关接口
 * @author WeChat Mini Program Team
 * @since 2025-08-13
 */

const Request = require('./request');

class RegionService {
  constructor() {
    this.service = 'region';
  }

  /**
   * 获取省份列表
   * @returns {Promise<Object>} 省份列表
   */
  async getProvinces() {
    return Request.get('/regions/provinces', {}, {
      service: this.service
    });
  }

  /**
   * 根据省份ID获取城市列表
   * @param {number} provinceId 省份ID
   * @returns {Promise<Object>} 城市列表
   */
  async getCitiesByProvince(provinceId) {
    return Request.get(`/regions/provinces/${provinceId}/cities`, {}, {
      service: this.service
    });
  }

  /**
   * 根据城市ID获取区县列表
   * @param {number} cityId 城市ID
   * @returns {Promise<Object>} 区县列表
   */
  async getDistrictsByCity(cityId) {
    return Request.get(`/regions/cities/${cityId}/districts`, {}, {
      service: this.service
    });
  }

  /**
   * 根据区县ID获取街道列表
   * @param {number} districtId 区县ID
   * @returns {Promise<Object>} 街道列表
   */
  async getStreetsByDistrict(districtId) {
    return Request.get(`/regions/districts/${districtId}/streets`, {}, {
      service: this.service
    });
  }

  /**
   * 根据街道ID获取社区列表
   * @param {number} streetId 街道ID
   * @returns {Promise<Object>} 社区列表
   */
  async getCommunitiesByStreet(streetId) {
    return Request.get(`/regions/streets/${streetId}/communities`, {}, {
      service: this.service
    });
  }

  /**
   * 根据社区ID获取楼栋列表
   * @param {number} communityId 社区ID
   * @returns {Promise<Object>} 楼栋列表
   */
  async getBuildingsByCommunity(communityId) {
    return Request.get(`/regions/communities/${communityId}/buildings`, {}, {
      service: this.service
    });
  }

  /**
   * 根据楼栋ID获取房间列表
   * @param {number} buildingId 楼栋ID
   * @returns {Promise<Object>} 房间列表
   */
  async getRoomsByBuilding(buildingId) {
    return Request.get(`/regions/buildings/${buildingId}/rooms`, {}, {
      service: this.service
    });
  }

  /**
   * 搜索区域
   * @param {Object} params 查询参数
   * @param {string} params.name 名称
   * @param {number} params.level 级别
   * @param {number} params.parent_id 父级ID
   * @param {string} params.status 状态
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 搜索结果
   */
  async searchRegions(params = {}) {
    return Request.get('/regions/search', params, {
      service: this.service
    });
  }

  /**
   * 获取区域信息
   * @param {Object} params 查询参数
   * @param {number} params.province_id 省份ID
   * @param {number} params.city_id 城市ID
   * @param {number} params.district_id 区县ID
   * @returns {Promise<Object>} 区域信息
   */
  async getRegionInfo(params = {}) {
    return Request.get('/regions/info', params, {
      service: this.service
    });
  }

  /**
   * 验证区域ID
   * @param {Object} regionData 区域数据
   * @param {number} regionData.province_id 省份ID
   * @param {number} regionData.city_id 城市ID
   * @param {number} regionData.district_id 区县ID
   * @returns {Promise<Object>} 验证结果
   */
  async validateRegionIds(regionData) {
    return Request.post('/regions/validate', regionData, {
      service: this.service
    });
  }

  /**
   * 获取完整的区域层级信息
   * @param {Object} params 参数
   * @param {number} params.province_id 省份ID
   * @param {number} params.city_id 城市ID
   * @param {number} params.district_id 区县ID
   * @param {number} params.street_id 街道ID
   * @param {number} params.community_id 社区ID
   * @param {number} params.building_id 楼栋ID
   * @returns {Promise<Object>} 完整的区域信息
   */
  async getFullRegionInfo(params = {}) {
    return Request.get('/regions/full-info', params, {
      service: this.service
    });
  }

  /**
   * 获取热门城市
   * @returns {Promise<Object>} 热门城市列表
   */
  async getHotCities() {
    return Request.get('/regions/hot-cities', {}, {
      service: this.service
    });
  }

  /**
   * 获取默认区域
   * @returns {Promise<Object>} 默认区域信息
   */
  async getDefaultRegion() {
    return Request.get('/regions/default', {}, {
      service: this.service
    });
  }
}

module.exports = new RegionService();
